package com.dz.Incubator.entity;

import java.io.Serializable;

/**
 * @param <T>
 */
public class InvokeResult<T> implements Serializable{

    /**
     * 请求成功
     */
    private static final String REQUEST_SUCCESS = "0000";
    /**
     * 请求成功-参数为空
     */
    private static final String REQUEST_SUCCESS_PARAM_NO_DATA = "201";
    /**
     * 请求失败
     */
    private static final String REQUEST_FAILURE = "400";
    /**
     * 请求错误
     */
    private static final String REQUEST_ERROR = "500";
    /**
     * 修改密码
     */
    private static final String UPDATE_PASSWORD = "1001";

    private String code;
    private String msg;
    private boolean hasErrors;
    private T data;

    /**
     * 请求成功无参数
     * @return InvokeResult
     */
    public static InvokeResult success(){
        InvokeResult invokeResult = new InvokeResult();
        invokeResult.setMsg("请求成功!");
        invokeResult.setCode(REQUEST_SUCCESS);
        invokeResult.hasErrors = false;
        return invokeResult;
    }

    /**
     * 修改密码
     * @return InvokeResult
     */
    public static InvokeResult updatePassword(){
        InvokeResult invokeResult = new InvokeResult();
        invokeResult.setMsg("请求成功!");
        invokeResult.setCode(UPDATE_PASSWORD);
        invokeResult.hasErrors = false;
        return invokeResult;
    }

    /**
     * 请求成功有参数
     * @param data 参数
     * @return InvokeResult
     */
    public static InvokeResult success(Object data){
        InvokeResult invokeResult = new InvokeResult();
        invokeResult.setData(data);
        invokeResult.setCode(REQUEST_SUCCESS);
        invokeResult.setMsg("请求成功!");
        invokeResult.hasErrors = false;
        return invokeResult;
    }

    /**
     * 请求失败设置响应信息
     * @param msg 响应信息
     * @return InvokeResult
     */
    public static InvokeResult failure(String msg){
        InvokeResult invokeResult = new InvokeResult();
        invokeResult.setCode(REQUEST_FAILURE);
        invokeResult.setMsg(msg);
        invokeResult.hasErrors = true;
        return invokeResult;
    }

    /**
     * 请求失败
     * @param code 响应码
     * @param msg 响应信息
     * @return InvokeResult
     */
    public static InvokeResult failure(String code, String msg){
        InvokeResult invokeResult = new InvokeResult();
        invokeResult.setCode(code);
        invokeResult.setMsg(msg);
        invokeResult.hasErrors = true;
        return invokeResult;
    }

    /**
     * 业务错误
     * @param code 响应码
     * @return  InvokeResult
     */
    public static InvokeResult businessError(String code){
        InvokeResult invokeResult = new InvokeResult();
        invokeResult.setCode(code);
        invokeResult.setMsg("业务异常!");
        invokeResult.hasErrors = true;
        return invokeResult;
    }

    /**
     * 服务器内部错误
     * @return  InvokeResult
     */
    public static InvokeResult error(){
        InvokeResult invokeResult = new InvokeResult();
        invokeResult.setCode(REQUEST_ERROR);
        invokeResult.setMsg("服务内部错误!");
        invokeResult.hasErrors = true;
        return invokeResult;
    }

    /**
     * 请求成功，参数为空
     * @return InvokeResult
     */
    public static InvokeResult pass_no_data(){
        InvokeResult invokeResult = new InvokeResult();
        invokeResult.setCode(REQUEST_SUCCESS_PARAM_NO_DATA);
        invokeResult.setMsg("查询数据为空!");
        invokeResult.hasErrors = true;
        return invokeResult;
    }

    public boolean isSuccess() {
        return !hasErrors;
    }

    public boolean hasErrors() {
        return hasErrors;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

}
